package br.ueg.ezrides.visao.composer;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;

import br.com.vexillum.util.ReflectionUtils;
import br.com.vexillum.view.CRUDComposer;
import br.ueg.ezrides.control.CategoriaController;
import br.ueg.ezrides.control.PaisController;
import br.ueg.ezrides.control.UsuarioController;
import br.ueg.ezrides.modelo.entidades.Categoria;
import br.ueg.ezrides.modelo.entidades.Estado;
import br.ueg.ezrides.modelo.entidades.Pais;
import br.ueg.ezrides.modelo.entidades.Usuario;

@SuppressWarnings("serial")
public class UserComposer extends CRUDComposer<Usuario, UsuarioController> {

	private Pais pesqPais;
	
	public Pais getPesqPais() {
		return pesqPais;
	}

	public void setPesqPais(Pais pesqPais) {
		this.pesqPais = pesqPais;
	}
	
	public void doAfterCompose(Component comp) throws Exception{
		super.doAfterCompose(comp);
	}
	
	public static Boolean haveIdOnRequest(){
		String id = Executions.getCurrent().getParameter("id");
		return ((id != null && Integer.parseInt(id) >= 0));
	}
	
	@SuppressWarnings("unchecked")
	public boolean initUserById(String id){
		entity.setId(Long.parseLong(id));
		entity.setAtivo(null);
		List<Usuario> list = (List<Usuario>) getControl().doAction("searchByCriteria").getList();
		if(list != null && !list.isEmpty()){
			entity = list.get(0);
			return true;
		}		
		return false;
	}
	
	public static boolean isAdministrator(){
		if(isLogged()){
		}
		return true;
	}
	
	@SuppressWarnings("unchecked")
	public List<Pais> getPaises(){
		PaisController controlador = new PaisController(ReflectionUtils.prepareDataForPersistence(this));
		return (List<Pais>) controlador.doAction("listAll").getList();
	}
	
	@SuppressWarnings("unchecked")
	public List<Estado> getEstados(){
		if(pesqPais == null){
			return new ArrayList<Estado>();
		}
		else {
			HashMap<String, Object> data =  new HashMap<String, Object>();
			
			Estado estado = new Estado();
			estado.setPais(pesqPais);
			
			data.put("entity", estado);
			PaisController controlador = new PaisController(data);
			return (List<Estado>) controlador.doAction("searchByCriteria").getList();
		}
		
	}
	
	@SuppressWarnings("unchecked")
	public List<Categoria> getCategorias(){
		CategoriaController controlador = new CategoriaController(ReflectionUtils.prepareDataForPersistence(this));
		return (List<Categoria>) controlador.doAction("listAll").getList();
	}
	
	@Override
	public UsuarioController getControl() {
		return new UsuarioController(ReflectionUtils.prepareDataForPersistence(this)); 
	}

	@Override
	public Usuario getEntityObject() {
		return new Usuario();
	}

}
